package com.zjcloud.jwgl.mapper;

import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.zjcloud.jwgl.domain.AcScheduleConstraintTemplate;

/**
 * 排课约束条件模板Mapper接口
 * 
 * @author zjcloud
 * @date 2024-12-19
 */
public interface AcScheduleConstraintTemplateMapper 
{
    /**
     * 查询排课约束条件模板
     * 
     * @param id 排课约束条件模板主键
     * @return 排课约束条件模板
     */
    public AcScheduleConstraintTemplate selectAcScheduleConstraintTemplateById(@Param("id") Long id);

    /**
     * 查询排课约束条件模板列表
     * 
     * @param acScheduleConstraintTemplate 排课约束条件模板
     * @return 排课约束条件模板集合
     */
    public List<AcScheduleConstraintTemplate> selectAcScheduleConstraintTemplateList(AcScheduleConstraintTemplate acScheduleConstraintTemplate);

    /**
     * 新增排课约束条件模板
     * 
     * @param acScheduleConstraintTemplate 排课约束条件模板
     * @return 结果
     */
    public int insertAcScheduleConstraintTemplate(AcScheduleConstraintTemplate acScheduleConstraintTemplate);

    /**
     * 修改排课约束条件模板
     * 
     * @param acScheduleConstraintTemplate 排课约束条件模板
     * @return 结果
     */
    public int updateAcScheduleConstraintTemplate(AcScheduleConstraintTemplate acScheduleConstraintTemplate);

    /**
     * 删除排课约束条件模板
     * 
     * @param id 排课约束条件模板主键
     * @return 结果
     */
    public int deleteAcScheduleConstraintTemplateById(@Param("id") Long id);

    /**
     * 批量删除排课约束条件模板
     * 
     * @param ids 需要删除的排课约束条件模板主键集合
     * @return 结果
     */
    public int deleteAcScheduleConstraintTemplateByIds(@Param("ids") Long[] ids);

    /**
     * 查询默认模板列表
     * 
     * @return 默认模板集合
     */
    public List<AcScheduleConstraintTemplate> selectDefaultTemplates();

    /**
     * 根据模板名称查询模板信息列表
     * 
     * @param templateName 模板名称
     * @return 模板信息列表
     */
    public List<AcScheduleConstraintTemplate> selectByTemplateName(@Param("templateName") String templateName);

    /**
     * 设置默认模板
     * 
     * @param id 模板ID
     * @return 结果
     */
    public int setDefaultTemplate(@Param("id") Long id);

    /**
     * 清除所有默认模板标记
     * 
     * @return 结果
     */
    public int clearDefaultTemplates();

    /**
     * 检查模板完整性 - 验证模板是否包含所有必需的约束条件
     * 
     * @param templateName 模板名称
     * @return 缺失的约束条件数量
     */
    public int checkTemplateIntegrity(@Param("templateName") String templateName);

    /**
     * 获取模板的约束条件统计信息
     * 
     * @param templateName 模板名称
     * @return 约束条件统计信息
     */
    public AcScheduleConstraintTemplate getTemplateStatistics(@Param("templateName") String templateName);

    /**
     * 根据模板名称查询第一个模板记录（向后兼容）
     * 
     * @param templateName 模板名称
     * @return 第一个模板记录
     */
    public AcScheduleConstraintTemplate selectFirstByTemplateName(@Param("templateName") String templateName);

    /**
     * 验证模板名称是否存在
     * 
     * @param templateName 模板名称
     * @return 存在返回1，不存在返回0
     */
    public int validateTemplateExists(@Param("templateName") String templateName);

    /**
     * 获取模板的约束条件类型列表
     * 
     * @param templateName 模板名称
     * @return 约束条件类型列表
     */
    public List<String> getTemplateConstraintTypes(@Param("templateName") String templateName);

    /**
     * 批量插入模板约束条件
     * 
     * @param templateList 模板约束条件列表
     * @return 插入成功的记录数
     */
    public int batchInsertTemplateConstraints(@Param("list") List<AcScheduleConstraintTemplate> templateList);

    /**
     * 根据模板名称删除所有相关约束条件
     * 
     * @param templateName 模板名称
     * @return 删除的记录数
     */
    public int deleteByTemplateName(@Param("templateName") String templateName);
}